<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**/

namespace Application\Model\Entity;

use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Adapter\Adapter;


class Derivador {

    private $mesa;
    private $tipo_solicitud;
    private $id_usuario;
    private $rol;
    private $boton;
    private $query;
    private $control; /* bandera para saber que cumplio alguno de los casos */
    private $casos;
    public $Adapter;
    
    
    public function __construct($datos) {
        /* conectar con la BD */
        
        $this->mesa = $datos['mesa_entrada'];
        $this->id_usuario = $datos['id_usuario'];
        $this->boton = $datos['boton'];
        $this->Adapter = $datos['adapter']; 
        $this->query = '';
        $this->control = 0;
        self::getRoles();
        self::getTipoSolicitud();
        
    }
    /* obtiene rol del usuario */

    private function getRoles() {

        /* se supone que no existe mas de un rol y se obvia el rol de administrador */
        $q = 'SELECT id_roles FROM rol_por_usuario  '
                . 'WHERE  id_usuario =' . $this->id_usuario . "AND id_roles <> 10";
        $rol = $this->Adapter->query($q, Adapter::QUERY_MODE_EXECUTE);
        $r = $rol->toArray();
        $this->rol = $r[0]['id_roles'];
        return ($this->rol);
    }

    /* obtiene el tipo de solicitud de la mesa de entrada que llego como parametro */

    private function getTipoSolicitud() {
        $q = 'SELECT id_tipo_solicitud FROM solicitud_realizada '
                . 'WHERE mesa_entrada =' . $this->mesa;
        $ts = $this->Adapter->query($q, Adapter::QUERY_MODE_EXECUTE);
        $t = $ts->toArray();
        $this->tipo_solicitud = $t[0]['id_tipo_solicitud'];
        return ($this->tipo_solicitud);
    }

    /* se crean crean valores manejables para identificacion de los casos
      en el que ocurren las derivaciones segun los casos de llamada y rol */

    private function alumnoEstados($ts, $boton) {
        $this->casos = array(1, 1, 0, 0, 0, 0, 0, 0, 0);
    }

    private function pefEstados($ts, $boton) {
        $this->casos = array(1, 1, 0, 0, 0, 0, 0, 0, 0);
    }

    private function srecepcionEstados($ts, $boton) {
        if ($boton == 'derivar' || $boton == 'enviar') {
            /* 1 a secretario academico(tipo_solicitud:14 15 18-22) */
            if ($ts == 14 || $ts == 15 || ( $ts >= 18 && $ts <= 22 )) {
                $this->casos = array(1, 3, 1, 0, 0, 0, 0, 0, 0);
                /* 2 a secretario dpto(tipo_solicitud:1 3 6-12 16 17) */
            } elseif ($ts == 1 || $ts == 3 || $ts == 16 || $ts == 17 || ( $ts >= 6 && $ts <= 12 )) {
                $this->casos = array(1, 3, 0, 1, 0, 0, 0, 0, 0);
                /* 3 a secretario gral(tipo_solicitud:2 4 ) */
            } elseif ($ts == 2 || $ts == 4) {
                $this->casos = array(1, 3, 0, 0, 1, 0, 0, 0, 0);
            } else {
                $this->control = 1;
            }
        } elseif ($boton == 'anular') {
            $this->casos = array(5, 3, 0, 0, 0, 0, 0, 0, 0);
        } else {
            $this->control = 1;
        }
    }

    private function sacademicoEstados($ts, $boton) {
        if ($boton == 'derivar'||$boton == 'enviar') {
            /* 1 a director academico(10-12 14 15 18 20 22) */
            if ($ts == 14 || $ts == 15 || $ts == 18 || $ts == 20 || $ts == 22 || ( $ts >= 10 && $ts <= 12 )) {
                $this->casos = array(2, 3, 3, 0, 0, 0, 1, 0, 0);
            } else {
                $this->control = 1;
            }
        } elseif ($boton == 'resolver') {
            /* 3 resolver (TS: 19 21)             */
            if ($ts == 19 || $ts == 21) {
                $this->casos = array(4, 3, 3, 0, 0, 0, 0, 0, 1);
            }
        } elseif ($boton == 'anular') {
            $this->casos = array(5, 3, 3, 0, 0, 0, 0, 0, 0);
        } else {
            $this->control = 1;
        }
    }

    private function sdepartamentoEstados($ts, $boton) {
        if ($boton == 'derivar' || $boton == 'enviar') {
            /* 1 a secretario gral(10 11 12) */
            if ($ts >= 10 && $ts <= 12) {
                $this->casos = array(2, 3, 0, 3, 0, 1, 0, 0, 0);
                /* 2 director de dpto(1 3 6-12 16 17) */
            } elseif ($ts == 1 || $ts == 3 || $ts == 16 || $ts == 17 || ($ts >= 6 && $ts <= 12)) {
                $this->casos = array(2, 3, 0, 3, 0, 1, 0, 0, 0);
            } else {
                $this->control = 1;
            }
        } elseif ($boton == 'anular') {
            $this->casos = array(5, 3, 0, 3, 0, 0, 0, 0, 0);
        } else {
            $this->control = 1;
        }
    }

    private function sgeneralEstados($ts, $boton) {
        /* 1 a secretario academico(10 11 12) */
        if ($boton == 'derivar' || $boton == 'enviar') {
            if ($ts >= 10 && $ts <= 12) {
                $this->casos = array(2, 3, 0, 0, 3, 0, 0, 1, 0);
                /* 2 a decano(2 3 4 14) */
            } elseif ($ts == 2 || $ts == 3 || $ts == 4) {
                $this->casos = array(2, 3, 0, 0, 3, 0, 0, 1, 0);
            } else {
                $this->control = 1;
            }
        } elseif ($boton == 'anular') {
            $this->casos = array(1, 1, 0, 0, 0, 0, 0, 0, 0);
        } else {
            $this->control = 1;
        }
    }

    private function ddepartamentoEstados($ts, $boton) {
        /* (1 3 6-12 16 17) */
        if ($ts == 1 || $ts == 3 || $ts == 16 || $ts == 17 || ($ts >= 6 && $ts <= 12)) {
            if ($boton == 'aceptar') {//1 aceptar
                $this->casos = array(4, 3, 0, 3, 0, 3, 0, 0, 1);
            } elseif ($boton == 'rechazar') {//2 rechazar
                $this->casos = array(4, 3, 0, 3, 0, 3, 0, 0, 0);
            } elseif ($boton == 'anular') {//3 anular
                $this->casos = array(5, 3, 0, 3, 0, 3, 0, 0, 0);
            } else {
                $this->control = 1;
            }
        } else {
            $this->control = 1;
        }
    }

    private function dacademicoEstados($ts, $boton) {
	//echo 'HOLA dacademico';
	//echo $boton;
        /* (10-12 14 15 18 20 22) */
        if ($ts == 14 || $ts == 15 || $ts == 18 || $ts == 20 || $ts == 22 || ($ts >= 10 && $ts <= 12)) {
	    //echo $ts;
            if ($boton == 'aceptar') {//1 aceptar
		//echo $boton;
                $this->casos = array(4, 3, 3, 0, 0, 0, 3, 0, 1);
            } elseif ($boton == 'rechazar') {//2 rechazar
                $this->casos = array(4, 3, 3, 0, 0, 0, 3, 0, 0);
            } elseif ($boton == 'anular') {//3 anular
                $this->casos = array(5, 3, 3, 0, 0, 0, 3, 0, 0);
            } elseif ($boton == 'visto bueno') {//4 visto bueno
                $this->casos = array(4, 3, 3, 0, 0, 0, 3, 0, 1);
            } else {
                $this->control = 1;
            }
        } else {
            $this->control = 1;
        }
    }

    private function decanoEstados($ts, $boton) {
        /* (2 3 4 14) */
        if ($ts == 2 || $ts == 3 || $ts == 4 || $ts == 14) {
            if ($boton == 'aceptar') {//1 aceptar
                $this->casos = array(4, 1, 3, 0, 0, 3, 0, 0, 1);
            } elseif ($boton == 'rechazar') {//2 rechazar
                $this->casos = array(4, 1, 3, 0, 0, 3, 0, 0, 0);
            } elseif ($boton == 'anular') {//3 anular
                $this->casos = array(5, 1, 3, 0, 0, 3, 0, 0, 0);
            } elseif ($boton == 'visto bueno') {//4 visto bueno
                $this->casos = array(4, 1, 3, 0, 0, 3, 0, 0, 1);
            } else {
                $this->control = 1;
            }
        } else {
            $this->control = 1;
        }
    }

    private function setCasos() {
        if ($this->rol == 1) {/* alumno */
            self::alumnoEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 2) { /* pef */
            self::pefEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 3) { /* secretario recepcion */
            self::srecepcionEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 4) { /* secretario academico */
            self::sacademicoEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 5) { /* secretario departamento */
            self::sdepartamentoEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 6) { /* secretario general */
            self::sgeneralEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 7) { /* director academico */
            self::dacademicoEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 8) { /* director departamento */
            self::ddepartamentoEstados($this->tipo_solicitud, $this->boton);
        } elseif ($this->rol == 9) { /* decano */
            self::decanoEstados($this->tipo_solicitud, $this->boton);
        } else {/* control de seteado de valores */
            $this->control = 1;
        }
    }

    /* Setea los estados  */

    public function setEstados() {
        
        self::setCasos();
        //$this->casos = array (2,2,2,2,1,2,2,2,9) ;
        /* se escribe en la bd */
        if (!$this->control) {
            /* se arma el query para setear los estados */
            $c = $this->casos;
            $this->query = 'UPDATE solicitud_realizada SET	'
                    . 'estado_solicitud =' . $c[0]
                    . ',estado_srecepcion =' . $c[1] . ',estado_sacademico = ' . $c[2]
                    . ',estado_sdpto = ' . $c[3] . ',estado_sgral = ' . $c[4]
                    . ',estado_ddpto = ' . $c[5] . ',estado_dacademico = ' . $c[6]
                    . ',estado_decano = ' . $c[7] .  ',solicitud_habilitada = ' . $c[8]
                    . 'WHERE mesa_entrada =' . $this->mesa;
            $escribir = $this->Adapter->query($this->query, Adapter::QUERY_MODE_EXECUTE);
        }
        /*if ($this->control || !$escribir) {
            throw new \Exception('Error al escribir en la BD: derivador');
        }
*/
        return $this->control;
    }

}
